package control

import (
	"github.com/gin-gonic/gin"
	"mvip-route/beans"
	"mvip-route/config"
	_const "mvip-route/const"
	"mvip-route/service/model"
	"mvip-route/utils"
	"net/http"
	"net/url"
)

// Redirect 重新向
type Redirect struct{}

// RedirectHandler  302重新向
func (r Redirect) RedirectHandler(context *gin.Context) {

	target := config.Config.ServerConfig.AppMode

	// 获取到短连接地址 重定向到长连接
	shortURL := context.Param("shortURL")

	println(shortURL)

	context.Redirect(302, target)
}

// RedirectTarget  302重定向到target 域名 如果是微信环境 提示到浏览器
func (r Redirect) RedirectTarget(context *gin.Context) {

	request := context.Request
	clientIP := context.ClientIP()

	// 获取中间件中设置的ramRed
	value, exists := context.Get(_const.RamRed)
	if !exists {
		beans.Fail(context, "RamRed 不存在")
		return
	}

	// 二级跳转 是否为空
	vo := value.(*model.DamRedVo)
	target := vo.Target

	// 所属平台
	platform := vo.Platform
	if target == "" {
		beans.Fail(context, "目标地址不能为空")
		return

		// 访问的是根域名 估计是有人在搞事情了；记录日志 提示404
		utils.LogAsync("访问不存在的sld，又在搞事情？", clientIP, platform, request)
		context.AbortWithStatus(http.StatusForbidden)
		return
	}

	// 解析 target URL 成一个*URL对象
	targetURL, err := url.Parse(target)
	if err != nil || targetURL.Scheme == "" || targetURL.Host == "" {
		context.JSON(http.StatusBadRequest, gin.H{"error": "错误的目标地址"})
		return
	}

	// 获取原始查询参数
	query := context.Request.URL.Query()

	// 将查询参数附加到目标 URL
	targetURL.RawQuery = targetURL.RawQuery + "&" + query.Encode()

	params := targetURL.Query()
	params.Set("sld", vo.Sld)
	targetURL.RawQuery = params.Encode()

	// 打印地址
	println(targetURL.String())

	// 执行重定向
	context.Redirect(http.StatusFound, targetURL.String())

	// 直接跳转

	// 获取原始查询参数
	//query := context.Request.URL.Query()

	// 删除 target 参数以避免重复
	//query.Del(param)

	// 将查询参数附加到目标 URL
	//targetURL.RawQuery = query.Encode()

	// 执行重定向
}
